// SubPermutaion.cpp
#include <set>
#include <vector>
#include <algorithm>
#include <iostream>
#include <algorithm>

using namespace std;

// next_permutaion
// prev_permutaion
// 打印 v 中找出 n 个元素为一组的所有排列
// subPermutation({1, 2, 3}, 2)
// 1 2
// 2 1
// 1 3
// 3 1
// 2 3
// 3 2
/*
3 2 1 
3 1 2 
2 3 1 
2 1 3 
1 3 2 
1 2 3
*/
// 受难立面
// 魔方
void subPermutation(const vector<int> v, int n) {
  sort(v.begin(), v.end());
  set<vector<int>> result;

  do {
    vector<int> line(v.begin(), v.begin() + n);
    result.insert(line);
  } while (next_permutation(v.begin(), v.end()));

  for (vector<int> vec : result) {
    for (int i : vec) {
      cout << i << " ";
    }
    cout << endl;
  }
}

int main(int argc, char const *argv[])
{
  /* code */
  vector<int> v {3, 2, 1};
  
  do {
    for (int n : v ) {
      cout << n << " ";
    }
    cout << endl;
  }
  while (prev_permutation(v.begin(), v.end()));

  
  return 0;
}

